import random
import traceback
from datetime import datetime
from tkinter import ttk

import xlrd


class CommonUtils:
    # 全局日志
    InformationList = []

    # 打印队列
    Print_queue = []

    # 全局日期
    DATE = ""

    def __init__(self):
        pass

    @classmethod
    def set_information(cls, value):
        cls.InformationList.append(value)

    @classmethod
    def get_information(cls):
        return cls.InformationList

    @classmethod
    def set_print_queue(cls, value):
        cls.Print_queue.append(value)

    @classmethod
    def get_print_queue(cls):
        return cls.Print_queue

    @classmethod
    def set_date(cls, value):
        cls.DATE = value

    @classmethod
    def get_date(cls):
        return cls.DATE



    @staticmethod
    def set_error(logger, e, Message):
        logger.error("主程序抛错：" + Message)
        logger.error(e)
        logger.error("\n" + traceback.format_exc())

    @staticmethod
    def date():
        now = datetime.now()
        # 提取年、月、日
        current_year = now.year
        current_month = now.month
        current_day = now.day

        date_str = f"{current_year}年{current_month}月{current_day}日"
        return date_str

    @staticmethod
    def table_extract(file_path):
        # 打开Excel文件
        workbook = None
        try:
            workbook = xlrd.open_workbook(file_path)
        except:
            CommonUtils.set_information("表格格式有问题！！！\n请重新选择")

        # 选择工作表（假设是第一个工作表）
        worksheet = workbook["Sheet1"]

        rows_data = []
        try:
            # 遍历工作表的所有行
            for row_num in range(worksheet.nrows):
                # 创建一个空列表来存储当前行的每个单元格的数据
                row_data = []

                # 遍历当前行的每个单元格
                for col_num in range(worksheet.ncols):
                    # 获取单元格的值并添加到row_data列表中
                    cell_value = worksheet.cell(row_num, col_num).value
                    row_data.append(cell_value)

                # 将当前行的数据添加到rows_data列表中
                rows_data.append(row_data)
        except:
            CommonUtils.set_information("表格内容有问题！！！\n请重新选择")

        return rows_data

    # 随机信息
    @staticmethod
    def ran_message():
        MESSAGE = ["你只管努力，剩下的交给时间", "如今我努力奔跑，不过是为了追上那个曾经被寄予厚望的自己",
                   "要有最朴素的生活和最遥远的梦想，\n即使明天天寒地冻，山高水远，路远马亡",
                   "成功的秘诀就是每天都比别人多努力一点", "别抱怨努力的苦，那是你去看世界的路",
                   "一个人为什么要努力？ 我见过最好的答案就是：\n因为我喜欢的东西都很贵，我想去的地方都很远，\n我爱的人超完美",
                   "你必须非常努力，才能看起来毫不费力",
                   "当你在荒废时间，有多少人在拼命。\n别在最该奋斗的日子，选择了安逸",
                   "在你想要放弃的那一刻，\n想想为什么当初坚持走到了这里",
                   "任何不走心的努力都是敷衍你自己",
                   "再小的努力，乘以365都很明显",
                   "专注你的梦想，做自己的英雄"]

        return random.choice(MESSAGE)

    def check_and_create(self, path):
        if not path.exists():
            path.mkdir(parents=True)
            print(f"创建了目录：{path}")
        else:
            print(f"目录已经存在：{path}")

    # 按钮的样式
    @staticmethod
    def styled_button(master, text, command=None, width=10):
        style = ttk.Style()
        style.configure("TButton", padding=5, relief="flat", borderwidth=0)
        style.map("TButton", foreground=[('pressed', '!disabled', 'blue'), ('focus', '!disabled', 'blue')])

        button = ttk.Button(master, text=text, command=command, style="TButton")
        button['width'] = width

        return button
